package com.example.mybatisplus.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.apache.http.HttpHeaders;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Collections;

/**
 * @author 宋义州
 * @since 2019/10/23 15:07
 */
@Configuration
public class SwaggerConfig {

    /**
     * 创建基本信息（这些基本信息会展现在文档页面中）
     */
    @Bean
    public OpenAPI apiInfo() {
        return new OpenAPI().info(new Info()
                        .title("接口文档")
                        .version("1.0")
                        .description("项目开发文档说明")
                        .contact(new Contact().name("宋义州").email("s_yizhou@163.com").url("https://gitee.com/aliyizhou/base-serve.git"))
                        .license(new License().name("Apache 2.0").url("http://doc.xiaominfo.com")))
                // 设置全局请求头
                .components(new Components()
                        .addSecuritySchemes(HttpHeaders.AUTHORIZATION, // key值
                                new SecurityScheme()
                                        //请求认证类型
                                        .type(SecurityScheme.Type.HTTP)
                                        //API key参数名
                                        .name(HttpHeaders.AUTHORIZATION)
                                        //API key描述
                                        .description("Bearer token")
                                        //设置API key的存放位置
                                        .in(SecurityScheme.In.HEADER)
                                        //授权策略名称
                                        .scheme("bearer")
                                        //JWT的格式
                                        .bearerFormat("JWT")
                        )
                )
                .security(Collections.singletonList(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)));
    }

}
